﻿#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	//位运算：
	/*这里要用到左移运算符 <<,
	这个东西的意思是把在它右边的数在二进制的情况下往左边移动它左边的数位，
	并自动用 0 补齐，由于是二进制，所以 a<<b 就相当于 a∗2^b*/
	/*
	int n;
	scanf("%d",&n);
	printf("%d",1<<n);
	*/
	int n;
	cin >> n;
	cout << (long long)pow(2, n);
	return 0;
}
/*

1.常规做法：
时间复杂度 O(n)。

代码：
#include<bits/stdc++.h>//万能头
using namespace std;
int pow_2(int x){
	int ans=2;
   if(x==0) return 1;//这里需要特判一下2^0
	for(int i=2;i<=x;i++)
		ans*=2;
	return ans;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",pow_2(n));
	return 0;//好习惯*1
}
*/

/*2.快速幂：
时间复杂度 O(logn)。

代码：
#include<bits/stdc++.h>//万能头
using namespace std;
int quick_pow(int n,int p){//快速幂
	int ans=1;
	while(p>0){
		if(p&1) ans=ans*n;
		p/=2,n*=n;
	}
	return ans;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",quick_pow(2,n));
	return 0;//好习惯*2
}*/
